/**
 * com.chaeron.GPS - An API for access to GPS devices.
 *
 *
 * Copyright (c) 2001, 2002 Chaeron Corporation,
 * All rights reserved.
 * 
 * Chaeron grants you a non-exclusive license to use, modify and re-distribute
 * this program under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version, provided that this copyright notice and 
 * license appear on all copies of the software.
 * 
 * Software is provided "AS IS," without a warranty of any kind. ALL EXPRESS OR
 * IMPLIED REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
 * HEREBY EXCLUDED. THE ENTIRE RISK ARISING OUT OF USING THE SOFTWARE IS ASSUMED
 * BY THE LICENSEE. See the GNU General Public License for more details.
 *
 * CHAERON AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
 * LICENSEE OR ANY THIRD PARTY AS A RESULT OF USING OR DISTRIBUTING SOFTWARE.
 * IN NO EVENT WILL CHAERON OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE,
 * PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL
 * OR PUNITIVE DAMAGES, HOWEVER CAUSED AN REGARDLESS OF THE THEORY OF LIABILITY,
 * ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF CHAERON HAS
 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

 * @version     1.02
 * @author      Andrzej Jan Taramina, Chaeron Corporation
 *              andrzej@chaeron.com
 */

package com.chaeron.GPS.event;

//***************************************************************************
//*
//*     Imports
//*
//***************************************************************************/

import java.util.*;

//***************************************************************************
//*
//*    GPSWaypoint interface definition
//*
//***************************************************************************/

/**
 * The GPSWaypoint interface is implemented by protocol-specific objects to return
 * GPS Waypoint information to the user
 *
 */
 
public interface GPSWaypoint extends GPSValue
{

	//***************************************************************************
	//*
	//*     Constant definitions
	//*
	//***************************************************************************/

	// Implemented Methods flags
	
	public static final int		WAYPOINT_METHOD_ADDRESS					= 0x00000001;
	public static final int		WAYPOINT_METHOD_ALTITUDE				= 0x00000002;
	public static final int		WAYPOINT_METHOD_ATTRIBUTES				= 0x00000004;
	public static final int		WAYPOINT_METHOD_CITY					= 0x00000008;
	public static final int		WAYPOINT_METHOD_COLOUR					= 0x00000010;
	public static final int		WAYPOINT_METHOD_COMMENT					= 0x00000020;
	public static final int		WAYPOINT_METHOD_COUNTRYCODE				= 0x00000040;
	public static final int		WAYPOINT_METHOD_CROSSROAD				= 0x00000080;
	public static final int		WAYPOINT_METHOD_DEPTH					= 0x00000100;
	public static final int		WAYPOINT_METHOD_DISPLAYOPTIONS			= 0x00000200;
	public static final int		WAYPOINT_METHOD_DISTANCE				= 0x00000400;
	public static final int		WAYPOINT_METHOD_ESTIMATEDTIMEENROUTE	= 0x00000800;
	public static final int		WAYPOINT_METHOD_FACILITY				= 0x00001000;
	public static final int		WAYPOINT_METHOD_IDENTIFICATION			= 0x00002000;
	public static final int		WAYPOINT_METHOD_LATITUDE				= 0x00004000;
	public static final int		WAYPOINT_METHOD_LATITUDESEMICIRCLES		= 0x00008000;
	public static final int		WAYPOINT_METHOD_LINKIDENTIFICATION		= 0x00010000;
	public static final int		WAYPOINT_METHOD_LONGITUDE				= 0x00020000;
	public static final int		WAYPOINT_METHOD_LONGITUDESEMICIRCLES	= 0x00040000;
	public static final int		WAYPOINT_METHOD_STATECODE				= 0x00080000;
	public static final int		WAYPOINT_METHOD_SUBCLASS				= 0x00100000;
	public static final int		WAYPOINT_METHOD_SYMBOLTYPE				= 0x00200000;
	public static final int		WAYPOINT_METHOD_TYPE					= 0x00400000;
	
	public static final int		WAYPOINT_METHOD_ALL						= 0x007FFFFF;

	
	//***************************************************************************
	//*
	//*     Method Signatures
	//*
	//***************************************************************************/


	/**
	 * Get the Waypoint Type
	*
	* @return		Waypoint Type
	*/
	
	public byte getType();
	
	
	/**
	 * Get the Waypoint Colour
	*
	* @return		Waypoint Colour
	*/
	
	public byte getColour();
	
	
	/**
	 * Get the Waypoint Display Options
	*
	* @return		Waypoint Display Options
	*/
	
	public byte getDisplayOptions();
	
	
	/**
	 * Get the Waypoint Attributes
	*
	* @return		Waypoint Attributes
	*/
	
	public byte getAttributes();
	
	
	/**
	 * Get the Waypoint Symbol Type
	*
	* @return		Waypoint Symbol Type
	*/
	
	public short getSymbolType();
	
	
	/**
	 * Get the Waypoint Subclass
	*
	* @return		Waypoint Subclass
	*/
	
	public byte[] getSubclass();
	
	
	/**
	 * Get the Latitude (degrees)
	*
	* @return		Latitude (degrees)
	*/
	
	public double getLatitude();
	
	
	/**
	 * Get the Longitude (degrees)
	*
	* @return		Longitude (degrees)
	*/
	
	public double getLongitude();
	
	/**
	 * Get the Latitude (Semicircles)
	 *
	 * @return		Latitude (Semicircles)
	 */
	
	public int getLatitudeSemicircles();
	
	/**
	 * Get the Longitude (Semicircles)
	 *
	 * @return		Longitude (Semicircles)
	 */
	
	public int getLongitudeSemicircles();
	
	/**
	 * Get the Altitude (metres).  A value of 1.0e25 means the parameter is unsupported or unknown.
	*
	* @return		Altitude (metres)
	*/
	
	public float getAltitude();
	
	
	/**
	 * Get the Depth (metres). A value of 1.0e25 means the parameter is unsupported or unknown.
	*
	* @return		Depth (metres)
	*/
	
	public float getDepth();
	
	
	/**
	 * Get the Distance (metres). A value of 1.0e25 means the parameter is unsupported or unknown.
	*
	* @return		Distance (metres)
	*/
	
	public float getDistance();
	
	
	/**
	 * Get the State Code
	*
	* @return		State Code
	*/
	
	public String getStateCode();
	
	
	/**
	 * Get the Country Code
	*
	* @return		Country Code
	*/
	
	public String getCountryCode();

	/**
	 * Get the Estimated Time Enroute
	*
	* @return		ETE
	*/
	
	public int getEstimatedTimeEnroute();
	
	/**
	 * Get the Identification String
	*
	* @return		Identification String
	*/
	
	public String getIdentification();
	
	
	/**
	 * Get the Comment String
	*
	* @return		Comment String
	*/
	
	public String getComment();
	
	
	/**
	 * Get the Facility String
	*
	* @return		Facility String
	*/
	
	public String getFacility();
	
	
	/**
	 * Get the City String
	*
	* @return		City String
	*/
	
	public String getCity();
	
	
	/**
	 * Get the Address String
	*
	* @return		Address String
	*/
	
	public String getAddress();
	
	
	/**
	 * Get the Crossroad String
	*
	* @return		Crossroad String
	*/
	
	public String getCrossroad();
	
	/**
	 * Get the Link Identification String
	 *
	 * @return		Link Identification String
	 */
	
	public String getLinkIdentification();
	
}
